AVKit হলো iOS এর একটি ফ্রেমওয়ার্ক, যা AVFoundation এর ওপর ভিত্তি করে তৈরি করা হয়েছে এবং এটি মিডিয়া প্লেব্যাক ব্যবস্থাপনার জন্য একটি সরল এবং কার্যকরী টুলসেট প্রদান করে। AVPlayerViewController ব্যবহার করে আমরা খুব সহজেই কাস্টম মিডিয়া প্লেয়ার তৈরি করতে পারি, যা ভিডিও এবং অডিও ফাইল প্লেব্যাক করতে সক্ষম। AVKit ব্যবহার করে কাস্টম মিডিয়া প্লেয়ার তৈরি করার ক্ষেত্রে, আমরা বিভিন্ন কাস্টমাইজেশন এবং কন্ট্রোল অ্যাড করতে পারি, যেমন: প্লে, পজ, সিকার বার, এবং আরও অনেক কিছু।
Step-by-Step Implementation of Custom Media Player using AVKit
Step 1: Import AVKit এবং AVFoundation
প্রথমে, আপনার ViewController ফাইলে AVKit এবং AVFoundation ইমপোর্ট করুন:
import AVKit
import AVFoundation
Step 2: AVPlayer এবং AVPlayerViewController তৈরি করা
AVPlayer এবং AVPlayerViewController ব্যবহার করে মিডিয়া প্লেব্যাক সেটআপ করতে হবে।
class CustomPlayerViewController: UIViewController {
var player: AVPlayer?
var playerViewController: AVPlayerViewController?
override func viewDidLoad() {
super.viewDidLoad()
// ভিডিও URL সেট করা (লোকাল ফাইল বা রিমোট URL)
guard let url = URL(string: "https://www.example.com/samplevideo.mp4") else { return }
// AVPlayer সেটআপ করা
player = AVPlayer(url: url)
// AVPlayerViewController সেটআপ করা
playerViewController = AVPlayerViewController()
playerViewController?.player = player
// কাস্টম কন্ট্রোল অ্যাড করতে পারি বা ডিফল্ট রাখতে পারি
playerViewController?.showsPlaybackControls = true
// প্লেয়ার ভিউ কন্ট্রোলার প্রেজেন্ট করা
if let playerVC = playerViewController {
playerVC.view.frame = view.bounds
addChild(playerVC)
view.addSubview(playerVC.view)
playerVC.didMove(toParent: self)
}
}
// প্লেব্যাক শুরু করার জন্য একটি মেথড
func play() {
player?.play()
}
// প্লেব্যাক পজ করার জন্য একটি মেথড
func pause() {
player?.pause()
}
}
ব্যাখ্যা:
- AVPlayer: এটি একটি মিডিয়া প্লেয়ার অবজেক্ট, যা অডিও বা ভিডিও প্লেব্যাক করতে ব্যবহৃত হয়। এখানে আমরা একটি URL থেকে ভিডিও লোড করেছি।
- AVPlayerViewController: এটি একটি ভিউ কন্ট্রোলার, যা ভিডিও প্লেয়ারের UI প্রদর্শন করে। এতে ডিফল্ট প্লেব্যাক কন্ট্রোলস থাকে, যেমন প্লে, পজ, সিকার বার ইত্যাদি।
- showsPlaybackControls: আপনি যদি কাস্টম কন্ট্রোল ব্যবহার করতে চান, তবে এই প্রপার্টি
falseকরতে হবে। ডিফল্টভাবে এটিtrueথাকে। - play এবং pause: প্লেয়ারকে প্লে এবং পজ করার জন্য মেথড তৈরি করা হয়েছে।
Step 3: Custom Control Button অ্যাড করা
ডিফল্ট কন্ট্রোলসের পরিবর্তে আপনি যদি কাস্টম কন্ট্রোল অ্যাড করতে চান, তবে এটি সহজেই করা যায়। উদাহরণস্বরূপ, আমরা একটি কাস্টম প্লে/পজ বোতাম তৈরি করবো।
class CustomPlayerViewController: UIViewController {
var player: AVPlayer?
var playerViewController: AVPlayerViewController?
var playPauseButton: UIButton!
var isPlaying = false
override func viewDidLoad() {
super.viewDidLoad()
// AVPlayer এবং AVPlayerViewController সেটআপ
guard let url = URL(string: "https://www.example.com/samplevideo.mp4") else { return }
player = AVPlayer(url: url)
playerViewController = AVPlayerViewController()
playerViewController?.player = player
playerViewController?.showsPlaybackControls = false // কাস্টম কন্ট্রোলের জন্য
if let playerVC = playerViewController {
playerVC.view.frame = view.bounds
addChild(playerVC)
view.addSubview(playerVC.view)
playerVC.didMove(toParent: self)
}
// কাস্টম প্লে/পজ বোতাম তৈরি করা
playPauseButton = UIButton(type: .system)
playPauseButton.setTitle("Play", for: .normal)
playPauseButton.addTarget(self, action: #selector(playPauseTapped), for: .touchUpInside)
playPauseButton.frame = CGRect(x: 20, y: view.bounds.height - 60, width: 100, height: 40)
view.addSubview(playPauseButton)
}
@objc func playPauseTapped() {
if isPlaying {
player?.pause()
playPauseButton.setTitle("Play", for: .normal)
} else {
player?.play()
playPauseButton.setTitle("Pause", for: .normal)
}
isPlaying.toggle()
}
}
ব্যাখ্যা:
- playPauseButton: কাস্টম বোতাম তৈরি করা হয়েছে, যা প্লে এবং পজ করতে পারে।
- playPauseTapped: বোতামের জন্য একটি অ্যাকশন মেথড তৈরি করা হয়েছে, যা বোতাম প্রেস করলে প্লেয়ারকে প্লে বা পজ করবে এবং বোতামের টাইটেল পরিবর্তন করবে।
Step 4: সিকার বার অ্যাড করা
কাস্টম সিকার বার অ্যাড করতে আমরা UISlider ব্যবহার করতে পারি। এটি ব্যবহার করে ভিডিওর নির্দিষ্ট অংশে যেতে পারি।
var seekBar: UISlider!
override func viewDidLoad() {
super.viewDidLoad()
// আগের কোড...
// সিকার বার সেটআপ
seekBar = UISlider(frame: CGRect(x: 20, y: view.bounds.height - 100, width: view.bounds.width - 40, height: 30))
seekBar.addTarget(self, action: #selector(seekBarChanged), for: .valueChanged)
view.addSubview(seekBar)
// AVPlayer time observer ব্যবহার করে সিকার বার আপডেট করা
player?.addPeriodicTimeObserver(forInterval: CMTime(seconds: 1, preferredTimescale: 600), queue: .main) { [weak self] time in
guard let duration = self?.player?.currentItem?.duration else { return }
let currentTime = CMTimeGetSeconds(time)
let totalTime = CMTimeGetSeconds(duration)
self?.seekBar.value = Float(currentTime / totalTime)
}
}
@objc func seekBarChanged() {
guard let duration = player?.currentItem?.duration else { return }
let totalTime = CMTimeGetSeconds(duration)
let value = Float64(seekBar.value) * totalTime
let seekTime = CMTime(seconds: value, preferredTimescale: 600)
player?.seek(to: seekTime)
}
ব্যাখ্যা:
- UISlider: কাস্টম সিকার বার তৈরি করা হয়েছে, যা প্লেয়ারের টাইমলাইনকে কন্ট্রোল করতে ব্যবহৃত হয়।
- addPeriodicTimeObserver: প্লেয়ারের সময় পর্যবেক্ষণ করা হয়েছে, যাতে সিকার বার প্লেব্যাকের সময় অনুযায়ী আপডেট হয়।
- seekBarChanged: সিকার বার পরিবর্তন করলে ভিডিওকে সেই সময়ে নিয়ে যাওয়া হয়।
Step 5: AVPlayer এবং AVPlayerItem এর সাথে Notifications ব্যবহার করা
প্লেব্যাক স্টেট এবং ভিডিওর শেষ অবস্থা ট্র্যাক করতে AVPlayer এবং AVPlayerItem এর সাথে Notifications ব্যবহার করা যেতে পারে।
override func viewDidLoad() {
super.viewDidLoad()
// আগের কোড...
// প্লেব্যাক শেষ হলে নোটিফিকেশন
NotificationCenter.default.addObserver(self, selector: #selector(playerDidFinishPlaying), name: .AVPlayerItemDidPlayToEndTime, object: player?.currentItem)
}
@objc func playerDidFinishPlaying() {
print("Video Finished")
playPauseButton.setTitle("Play", for: .normal)
isPlaying = false
}
ব্যাখ্যা:
- AVPlayerItemDidPlayToEndTime: ভিডিও শেষ হলে এই নোটিফিকেশনটি ট্রিগার হয় এবং আমরা কাস্টম অ্যাকশন নিতে পারি, যেমন: বোতামের টাইটেল পরিবর্তন করা।
AVKit দিয়ে Custom Media Player তৈরি করার সেরা চর্চা
- Error Handling নিশ্চিত করুন: ভিডিও লোড হওয়ার সময় এরর চেক করুন এবং ব্যবহারকারীকে নোটিফাই করুন।
- User Permission নিশ্চিত করুন: অডিও বা ভিডিও ক্যাপচার করার সময় ব্যবহারকারীর অনুমতি নিশ্চিত করুন।
- Performance Optimization: ভিডিও প্লেব্যাকের সময় পারফরমেন্স অপ্টিমাইজ করুন এবং মেমোরি ব্যবস্থাপনা নিশ্চিত করুন।
- Custom Controls: ব্যবহারকারীর প্রয়োজন অনুযায়ী কাস্টম প্লেব্যাক কন্ট্রোলস তৈরি করুন, যা আরও ইন্টারঅ্যাকটিভ অভিজ্ঞতা প্রদান করে।
উপসংহার
AVKit ব্যবহার করে কাস্টম মিডিয়া প্লেয়ার তৈরি করা খুবই সহজ এবং কার্যকরী। AVPlayer এবং AVPlayerViewController ব্যবহার করে আমরা দ্রুত একটি মিডিয়া প্লেয়ার তৈরি করতে পারি, যা অডিও এবং ভিডিও প্লেব্যাক করতে সক্ষম। কাস্টমাইজড কন্ট্রোলস এবং কাস্টমাইজেশন অপশন ব্যবহার করে, ডেভেলপাররা আরও উন্নত এবং ব্যবহারকারীর জন্য উপযোগী মিডিয়া প্লেয়ার তৈরি করতে পারেন।